package com.jie.component.validation.validator.impl;

import cn.hutool.core.util.StrUtil;
import com.jie.common.util.RegexUtil;
import com.jie.component.validation.annotion.Phone;
import com.jie.component.validation.validator.ConstraintValidator;

/**
 * @author jie
 * @version 1.0 2025-02-11
 */
public class PhoneValidator implements ConstraintValidator<Phone> {

    @Override
    public boolean isValid(Object value, Phone annotation) {
        // 如果允许为空且值为空，返回true
        if (!annotation.required() && StrUtil.isBlank(value.toString())) {
            return true;
        }

        if (annotation.required() && StrUtil.isBlank(value.toString())) {
            return false;
        }

        String phone = value.toString().trim();

        // 根据注解配置决定验证类型
        return switch (annotation.type()) {
            case MOBILE -> RegexUtil.isPhone(phone);
            case FIXED -> RegexUtil.isFixedPhone(phone);
            case ALL -> RegexUtil.isPhone(phone) || RegexUtil.isFixedPhone(phone);
        };
    }

    @Override
    public String getMessage(Phone annotation) {
        // 如果注解指定了消息，使用注解消息
        if (!annotation.message().isEmpty()) {
            return annotation.message();
        }

        // 否则根据类型返回默认消息
        return switch (annotation.type()) {
            case MOBILE -> "请输入正确的手机号";
            case FIXED -> "请输入正确的固定电话（格式：010-1234567）";
            case ALL -> "请输入正确的电话号码（手机号或固定电话）";
            default -> "电话号码格式不正确";
        };
    }
}
